﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CH04_05
{
    class clsStudent
    {
        // 成员字段;
        /*
         * 参数说明:
         * iNum：    学生学号;
         * strName： 学生姓名;
         * iAge：    学生年龄;
         * strSex：  学生型别;
         */
        int iNum;       // 没有访问修饰符,默认为private;
        public string strName;
        private int iAge;
        private string strSex;

        // 声明公有属性实现访问私有iNum字段;
        public int Num
        {
            // 提供对iNum的读权限;
            get
            {
                return iNum;
            }

            // 提供对iNum的写权限;
            set
            {
                iNum = value;
            }
        }

        // 声明公有属性实现访问私有iAge字段;
        public int Age
        {
            // 提供对iAge的读权限;
            get
            {
                return iAge;
            }

            // 提供对iAge的写权限;
            set
            {
                iAge = value;
            }
        }

        // 声明公有属性实现访问私有strSex字段;
        public string Sex
        {
            // 提供对strSex的读权限;
            get
            {
                return strSex;
            }

            // 提供对strSex的写权限;
            set
            {
                strSex = value;
            }
        }

        // 定义学生入学方法;
        public void Enrollment()
        {
            Console.WriteLine("学号为:{0},姓名为:{1}同学入学!", iNum, strName);
        }

        // 定义学生成长方法;
        public void Grow()
        {
            iAge++;
        }

        // 定义学生毕业方法;
        public void Graduate()
        {
            Console.WriteLine("学号为:{0},姓名为:{1}同学毕业!", iNum, strName);
        }

        // 定义输出信息方法;
        public void Display()
        {
            Console.WriteLine("学生学号为:{0}", iNum);
            Console.WriteLine("学生姓名为:{0}", strName);
            Console.WriteLine("学生年龄为:{0}", iAge);
            Console.WriteLine();
        }

        // 声明带参数构造函数;
        public clsStudent(int num,string name,int age,string sex)
        {
            iNum = num;
            strName = name;
            iAge = age;
            strSex = sex;
        }

        // 声明不含参数构造函数;
        public clsStudent()
        {
            iNum = 201523;
            strName = "Willard";
            iAge = 18;
            strSex = "男";
        }

        // 声明析构函数;
        ~clsStudent()
        {
            Console.WriteLine("学生类的析构函数被调用!");
        }
    }

    class CH04_05
    {
        static void Main(string[] args)
        {
            // 调用不含参数的构造函数,初始化对象;
            clsStudent stu1 = new clsStudent();

            stu1.strName = "Luo";   // 修改学生姓名;
            stu1.Age = 20;          // 修改学生年龄;

            // 对象成员的引用;
            Console.WriteLine("/* ========= 学生1的信息 ========= */");
            stu1.Enrollment();
            stu1.Display();
            stu1.Grow();
            stu1.Display();
            stu1.Graduate();
            stu1.Display();

            // 调用含参数的构造函数,初始化对象;
            clsStudent stu2 = new clsStudent(201623, "Chen", 18, "女");
            Console.WriteLine("/* ========= 学生2的信息 ========= */");
            stu2.Enrollment();
            stu2.Display();
            stu2.Grow();
            stu2.Display();
            stu2.Graduate();
            stu2.Display();
        }
    }
}
